﻿#region Using

using System;
using SAPbouiCOM;

#endregion

namespace SapFramework.Interface.Events
{
    /// <summary>
    /// Modelo delegate para eventos com retorno bool e parâmetro MenuEvent
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate bool EventBoolMenu( MenuEvent aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno void e parâmetro MenuEvent
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate void EventVoidMenu( MenuEvent aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno void e parâmetro BusinessObjectInfo
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate void EventVoidBusinessInfo( BusinessObjectInfo aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno void e parâmetro ChooseFromList
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate void EventVoidChooseFromList( ChooseFromListEvent aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno void e parâmetro ContextMenuInfo
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate void EventVoidContextMenu( ContextMenuInfo aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno void e parâmetro ItemEvent
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate void EventVoidItem( ItemEvent aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno void e parâmetro PickerEvent
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate void EventVoidPicker( PickerEvent aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno void e parâmetro PrintEventInfo
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate void EventVoidPrint( PrintEventInfo aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno void e parâmetro ProgressBarEvent
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate void EventVoidProgressBar( ProgressBarEvent aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno void e parâmetro ReportDataInfo
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate void EventVoidReportData( ReportDataInfo aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno bool e parâmetro BusinessObjectInfo
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate bool EventBoolBusinessInfo( BusinessObjectInfo aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno bool e parâmetro ChooseFromList
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate bool EventBoolChooseFromList( ChooseFromListEvent aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno bool e parâmetro ContextMenuInfo
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate bool EventBoolContextMenu( ContextMenuInfo aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno bool e parâmetro ItemEvent
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate bool EventBoolItem( ItemEvent aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno bool e parâmetro PickerEvent
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate bool EventBoolPicker( PickerEvent aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno bool e parâmetro PrintEventInfo
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate bool EventBoolPrint( PrintEventInfo aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno bool e parâmetro ProgressBarEvent
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate bool EventBoolProgressBar( ProgressBarEvent aEvent );

    /// <summary>
    /// Modelo delegate para eventos com retorno bool e parâmetro ReportDataInfo
    /// </summary>
    /// <param name="aEvent">Dados do Evento</param>
    public delegate bool EventBoolReportData( ReportDataInfo aEvent );

    /// <summary>
    /// Atributo que realiza a marcação de eventos do SAP Business One
    /// </summary>
    public class EventAttribute : Attribute
    {
        /// <summary>
        /// Tipo do evento do SAP Business One.
        /// </summary>
        public BoEventTypes Type { get; set; }

        /// <summary>
        /// Construtor
        /// </summary>
        /// <param name="aType">Tipo do evento do SAP Business One.</param>
        public EventAttribute( BoEventTypes aType )
        {
            Type = aType;
        }
    }
}